﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using CondominioG1.Persistencia.NHibernate;
using CondominioG1.Dominio;

namespace CondominioG1.Pruebas.TestDAO
{
    [TestFixture]
    public class TestUsuarioDAO
    {
        private UsuarioDAO UsuarioDAO = new UsuarioDAO();

        [Test]
        public void TestCrear()
        {

            // 1. Instanciando el objeto DAO a probar
            Usuario nuevoUsuario = new Usuario();
            nuevoUsuario.Codigo = "44491253";
            nuevoUsuario.Nombres = "Pablo";
            nuevoUsuario.Apellidos = "Panduro";
            nuevoUsuario.Clave = "ppanduro@upc.edu.pe";
            nuevoUsuario.Tipo = "admin";
      
            // 2. Llamada al método del DAO a probar
            Usuario UsuarioCreado = UsuarioDAO.Crear(nuevoUsuario);
            Assert.DoesNotThrow(delegate
            {
                UsuarioCreado = UsuarioDAO.Crear(nuevoUsuario);
            });
            
            // 3. Implementar las validaciones
            Assert.NotNull(UsuarioCreado);
            Assert.AreEqual(nuevoUsuario.Nombres, UsuarioCreado.Nombres);

        }
        
        [Test]
        public void TestObtener()
        {
            // 1. Instanciamos el objeto TO
            String codigo = "44491253";
            // 2. Llamada al método del DAO a probar
            Usuario UsuarioObtenido = UsuarioDAO.Obtener(codigo);
            // 3. Implementar las validaciones
            Assert.NotNull(UsuarioObtenido);
            Assert.AreEqual(codigo, UsuarioObtenido.Codigo);
            Assert.NotNull(UsuarioObtenido.Nombres);
        }
        [Test]
        public void TestModificar()
        {

            // 2. Instanciamos el objeto TO
            Usuario UsuarioModificar = new Usuario();
            UsuarioModificar.Codigo = "44491253";
            UsuarioModificar.Clave = "carlogan2010@hotmail.com";
            // 3. Llamada al método del DAO a probar
            Usuario UsuarioObtenido = UsuarioDAO.Modificar(UsuarioModificar);
            // 4. Implementar las validaciones
            Assert.NotNull(UsuarioObtenido);
            Assert.AreEqual(UsuarioModificar.Clave, UsuarioObtenido.Clave);

        }
        [Test]
        public void TestEliminar()
        {

            // 2. Instanciamos el objeto TO
            Usuario UsuarioEliminar = new Usuario();
            UsuarioEliminar.Codigo = "44491253";
            // 3. Llamada al método del DAO a probar
            Assert.Catch<Exception>(delegate
            {
                UsuarioDAO.Eliminar(UsuarioEliminar);
            });
            Assert.DoesNotThrow(delegate
            {
                UsuarioDAO.Eliminar(UsuarioEliminar);
            });

            // 4. Implementar las validaciones
            Assert.NotNull(UsuarioEliminar);
            Assert.NotNull(UsuarioEliminar.Codigo);


        }
        [Test]
        public void TestListarUsuarioPorTipo()
        {
            string tipo = "admin";
            ICollection<Usuario> LUsuario = UsuarioDAO.ListarUsuarioPorTipo(tipo);
            Assert.NotNull(LUsuario);
            Assert.Greater(LUsuario.Count, 1);
        }
    }
}